package real.lang.reflect;

import java.util.Collection;
import java.util.Set;

import real.lang.RealLangException;

public interface RealType {
	
	public Class<?> getJavaClass();
	public Class<?> getRealClass();	
	
	public String getName();	
	public EnumerationOfRealTypes getRealTypeEnum();	
	public Set<EnumerationOfRealSubtypes> getRealSubtypesEnum();
	public RealTypeSignature getSignature();
		
	public boolean HasSuperType() throws RealLangException;
	public boolean IsRealSubtype() throws RealLangException;
	public Collection<RealType> getSuperRealTypes() throws RealLangException;
	public Collection<RealType> getSubRealTypes() throws RealLangException;
	
	public boolean HasSubTypes();
	public boolean HasSiblings() throws RealLangException;	
			
	/**
	 * Predicate
	 */
	public boolean IsTypeOf(EnumerationOfRealTypes type);
	public boolean IsTypeOf(RealType type);
}
